package com.company.design.create.factory.abstracts;

/**
 * @author yingfing
 * @create 2020--09--26 11:05
 * @describe 抽象工厂模式
 */
public class Test {
    /**
     * 一、工厂方法模式和抽象工厂模式不好分清楚,他们的区别如下 :
     * 1. 工厂方法模式 :
     * 一个抽象产品类,可以派生出多个具体产品类
     * 一个抽象工厂类,可以派生出多个集体工厂类
     * 每个具体工厂类只能创建一个具体产品类的实例
     * <p>
     * 2.抽象工厂模式 :
     * "多个抽象产品类",每个抽象产品类可以派生出多个具体产品类
     * 一个抽象产品类 , 可以派生出多个具体的工厂类
     * 每个具体工厂类可以创建"多个具体产品类的实例" , 也就是创建的是一个产品线的多个产品 .
     * <p>
     * 3. 区别 :
     * 工厂方法模式只有一个抽象产品类,而抽象工厂模式有多个
     * 工厂方法模式的具体工厂类只能创建一个具体产品类的实例 , 而抽象工厂模式可以创建多个 .
     * <p>
     * 工厂方法创建 " 一种 " 产品,着重点在于 " 怎么创建 "
     * 也就是说如果你开发 , 你的大量代码很可能围绕着这种产品的构造,初始化这些细节上面
     * 也因为如此 , 类似的产品之间有很多可以服用的特性,所以会和模板方法相随
     * <p>
     * 抽象工厂需要创建 " 一系列 " 产品 , 着重点在于 " 创建哪些 " 产品线上.
     * 也就是说,如果你开发,你的主要任务是划分不同差异的产品线,并且尽量保持每条产品线接口一致,从而可以从同一个抽象工厂继承
     */

    public static void main(String[] args) {
        AbstractFactory factory = FactoryProducer.getFactory("microsoft");
        factory.getKeyBoard();
        factory.getMouse();
    }
}
